/************************************************************
 * Project Name         [Thinking_In_Java]
 * File Name            [FeeSorter.java]
 * Creation Date        [10-Jul-2014]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ************************************************************/
package pkg_01_console_app.fee_mgmt;

import java.util.Comparator;

/**
 * 该类是资费类的排序器类, 规定了资费记录的排序规则
 * 
 * @author 不落的太阳(Sean Yang)
 * @version 1.0
 * @since JDK 6
 * 
 */
public class FeeSorter implements Comparator<Fee> {

	/**
	 * 按资费编号从小到大排序
	 */
	public static final int SORT_BY_ID = 1;
	/**
	 * 按资费名称的字典顺序排序
	 */
	public static final int SORT_BY_NAME = 2;
	/**
	 * 按基本费用从小到大排序
	 */
	public static final int SORT_BY_BASEFEE = 3;

	private final int type;

	/**
	 * 以指定的排序类型构造一个排序器类
	 * 
	 * @param type
	 *            排序类型
	 */
	public FeeSorter(int type) {
		this.type = type;
	}

	/**
	 * 实现Comparator的compare方法, 比较用来排序的两个参数.<br>
	 * 根据第一个参数小于, 等于或大于第二个参数分别返回负整数, 零或正整数
	 * 
	 * @param o1
	 *            要比较的第一个对象
	 * @param o2
	 *            要比较的第二个对象
	 * @return 根据第一个参数小于, 等于或大于第二个参数分别返回负整数, 零或正整数
	 */
	@Override
	public int compare(Fee o1, Fee o2) {
		switch (type) {
		case SORT_BY_ID:
			return new Integer(o1.getId()).compareTo(o2.getId());
		case SORT_BY_NAME:
			return o1.getName().compareTo(o2.getName()); // 按字典顺序比较两个字符串
		case SORT_BY_BASEFEE:
			return new Double(o1.getBasefee()).compareTo(o2.getBasefee());
		}
		return 0;
	}
}
